/**
 * ****************************************************************************
 * Copyright 2011, 2012 Chris Banes.
 * <p/>
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 * <p/>
 * http://www.apache.org/licenses/LICENSE-2.0
 * <p/>
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 * *****************************************************************************
 */
package com.banciyuan.bcywebview.base.view.pulltorefresh.internal;

import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Matrix;
import android.graphics.drawable.AnimationDrawable;
import android.graphics.drawable.Drawable;
import android.widget.ImageView.ScaleType;

import com.banciyuan.bcywebview.R;
import com.banciyuan.bcywebview.base.view.pulltorefresh.PullToRefreshBase.Mode;
import com.banciyuan.bcywebview.base.view.pulltorefresh.PullToRefreshBase.Orientation;


public class RotateLoadingLayout extends LoadingLayout {

    static final int ROTATION_ANIMATION_DURATION = 1200;

    //    private final Animation mRotateAnimation;
    private final Matrix mHeaderImageMatrix;

    private float mRotationPivotX, mRotationPivotY;

    private final boolean mRotateDrawableWhilePulling;
    private AnimationDrawable animationDrawable;

    public RotateLoadingLayout(Context context, Mode mode, Orientation scrollDirection, TypedArray attrs) {
        super(context, mode, scrollDirection, attrs);

        mRotateDrawableWhilePulling = attrs.getBoolean(R.styleable.PullToRefresh_ptrRotateDrawableWhilePulling, true);

        mHeaderImage.setScaleType(ScaleType.MATRIX);
        mHeaderImageMatrix = new Matrix();
        mHeaderImage.setImageMatrix(mHeaderImageMatrix);

//        mRotateAnimation = new RotateAnimation(0, 720, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF,
//                0.5f);
//        mRotateAnimation.setInterpolator(ANIMATION_INTERPOLATOR);
//        mRotateAnimation.setDuration(ROTATION_ANIMATION_DURATION);
//        mRotateAnimation.setRepeatCount(Animation.INFINITE);
//        mRotateAnimation.setRepeatMode(Animation.RESTART);

//        mHeaderImage.setImageResource(R.drawable.refreshing_loading);
//        animationDrawable = (AnimationDrawable) mHeaderImage.getDrawable();

        setLoadingDrawable(context.getResources().getDrawable(R.drawable.refreshing_loading));
    }

    public void onLoadingDrawableSet(Drawable imageDrawable) {
        if (null != imageDrawable) {
            mRotationPivotX = Math.round(imageDrawable.getIntrinsicWidth() / 2f);
            mRotationPivotY = Math.round(imageDrawable.getIntrinsicHeight() / 2f);
        }
    }

    protected void onPullImpl(float scaleOfLayout) {
//        float angle;
//        if (mRotateDrawableWhilePulling) {
//            angle = scaleOfLayout * 90f;
//        } else {
//            angle = Math.max(0f, Math.min(180f, scaleOfLayout * 360f - 180f));
//        }
//
//        mHeaderImageMatrix.setRotate(angle, mRotationPivotX, mRotationPivotY);
//        mHeaderImage.setImageMatrix(mHeaderImageMatrix);
    }

    @Override
    protected void refreshingImpl() {
//        mHeaderImage.startAnimation(mRotateAnimation);
//        Log.i("refreshingImpl", "pullToRefreshImpl====2");
    }

    @Override
    protected void resetImpl() {
        mHeaderImage.clearAnimation();
        resetImageRotation();
    }

    private void resetImageRotation() {
        if (null != mHeaderImageMatrix) {
            mHeaderImageMatrix.reset();
            mHeaderImage.setImageMatrix(mHeaderImageMatrix);
        }
    }

    @Override
    protected void pullToRefreshImpl() {
        // NO-OP
//        Log.i("pullToRefreshImpl", "pullToRefreshImpl===0");
    }

    @Override
    protected void releaseToRefreshImpl() {
        // NO-OP
//        Log.i("pullToRefreshImpl", "pullToRefreshImpl===1");
    }

    @Override
    protected int getDefaultDrawableResId() {
        return R.drawable.default_ptr_rotate;
    }

}
